﻿Imports System.Net
Imports SchoolClick.Security

Namespace SchoolClick.Controllers
    Public Class ReportesController
        Inherits System.Web.Mvc.Controller

        Private _extensionsFormat() As String = {"pdf", "doc", "xls"}

        Public Enum FormatExport
            PDF = 0
            Word = 1
            Excel = 2
        End Enum

        <HttpGet()> _
        <JFAllowAnonymousAttribute()> _
        Function SolicitudMatricula(NIE As String, Solicitud As Integer) As FileStreamResult
            'Primero vamos a construir la URL del informe
            Dim sURL = String.Format("{0}/Alumnos/Solicitud_Nuevo_Ingreso&NIE={1}&Solicitud={2}&rs:Format=pdf",
                                     ConfigurationManager.AppSettings("ReportServerURL"),
                                     NIE, Solicitud)

            Dim year = Date.Now.AddYears(1).Year

            'Creamos el WebRequest, para hacer la peticion y logearnos al servidor.
            Dim wr As HttpWebRequest = HttpWebRequest.Create(sURL)
            wr.Credentials = New NetworkCredential(ConfigurationManager.AppSettings("ReportServerUser"),
                                                   ConfigurationManager.AppSettings("ReportServerPassword").ToSecureString)
            wr.Timeout = System.Threading.Timeout.Infinite

            'Obtenemos el stream del reporte solicitado
            Dim wresp = wr.GetResponse

            'Retornamos el archivo al cliente que lo esta solicitando
            Return File(wresp.GetResponseStream, wresp.ContentType,
                        String.Format("Solicitud_No_{0}_Matricula_{1}.{2}", Solicitud, year, _extensionsFormat(0)))
        End Function

        <HttpGet()> _
        <Authorize(Roles:="ERA")> _
        Function PreseleccionMatricula(formato As String) As FileStreamResult
            Dim format = If(formato.Equals("PDF"), "pdf", "excel")
            Dim sURL = String.Format("{0}/Matricula_PreSeleccionados&rs:Format={1}",
                                     ConfigurationManager.AppSettings("ReportServerURL"), format)

            'Creamos el WebRequest, para hacer la peticion y logearnos al servidor.
            Dim wr As HttpWebRequest = HttpWebRequest.Create(sURL)
            wr.Credentials = New NetworkCredential(ConfigurationManager.AppSettings("ReportServerUser"),
                                                   ConfigurationManager.AppSettings("ReportServerPassword").ToSecureString)
            wr.Timeout = System.Threading.Timeout.Infinite

            'Obtenemos el stream del reporte solicitado
            Dim wresp = wr.GetResponse

            'Retornamos el archivo al cliente que lo esta solicitando
            Return File(wresp.GetResponseStream, wresp.ContentType,
                        String.Format("Listado_Alumnos_Preseleccionados_{0}.{1}", Date.Now.AddYears(1).Year, If(formato.Equals("PDF"), "pdf", "xls")))
        End Function

        <HttpGet()> _
        <Authorize(Roles:="ERA")> _
        Function NotasExaAdmisionMatricula(formato As String) As FileStreamResult
            Dim format = If(formato.Equals("PDF"), "pdf", "excel")
            Dim sURL = String.Format("{0}/Matricula_NotasExa&rs:Format={1}",
                                     ConfigurationManager.AppSettings("ReportServerURL"), format)

            'Creamos el WebRequest, para hacer la peticion y logearnos al servidor.
            Dim wr As HttpWebRequest = HttpWebRequest.Create(sURL)
            wr.Credentials = New NetworkCredential(ConfigurationManager.AppSettings("ReportServerUser"),
                                                   ConfigurationManager.AppSettings("ReportServerPassword").ToSecureString)
            wr.Timeout = System.Threading.Timeout.Infinite

            'Obtenemos el stream del reporte solicitado
            Dim wresp = wr.GetResponse

            'Retornamos el archivo al cliente que lo esta solicitando
            Return File(wresp.GetResponseStream, wresp.ContentType,
                        String.Format("Notas_Examen_Admision_{0}.{1}", Date.Now.AddYears(1).Year, If(formato.Equals("PDF"), "pdf", "xls")))
        End Function

        <HttpGet()> _
        <Authorize(Roles:="ERA")> _
        Function AllAlumnos_GradoAndSeccion(Year As String, formato As String) As FileStreamResult
            Dim format = If(formato.Equals("PDF"), "pdf", "excel")
            Dim sURL = String.Format("{0}/Alumnos/Todos_Alumnos_Grado_Seccion&ANIO={2}&rs:Format={1}",
                                     ConfigurationManager.AppSettings("ReportServerURL"), format, Year.EncodeHTML)

            'Creamos el WebRequest, para hacer la peticion y logearnos al servidor.
            Dim wr As HttpWebRequest = HttpWebRequest.Create(sURL)
            wr.Credentials = New NetworkCredential(ConfigurationManager.AppSettings("ReportServerUser"),
                                                   ConfigurationManager.AppSettings("ReportServerPassword").ToSecureString)
            wr.Timeout = System.Threading.Timeout.Infinite

            'Obtenemos el stream del reporte solicitado
            Dim wresp = wr.GetResponse

            'Retornamos el archivo al cliente que lo esta solicitando
            Return File(wresp.GetResponseStream, wresp.ContentType,
                        String.Format("Alumnos_Inscritos_Anio_{0}.{1}", Year, If(formato.Equals("PDF"), "pdf", "xls")))
        End Function

        <HttpGet()> _
        <Authorize(Roles:="ERA")> _
        Function AlumnosPeriodoRecuperacion(formato As String, Anio As String) As FileStreamResult
            Dim format = If(formato.Equals("PDF"), "pdf", "excel")
            Dim sURL = String.Format("{0}/Alumnos/Alumnos_Periodo_Recuperacion&ANIO={2}&rs:Format={1}",
                                     ConfigurationManager.AppSettings("ReportServerURL"), format, Anio.EncodeHTML)

            'Creamos el WebRequest, para hacer la peticion y logearnos al servidor.
            Dim wr As HttpWebRequest = HttpWebRequest.Create(sURL)
            wr.Credentials = New NetworkCredential(ConfigurationManager.AppSettings("ReportServerUser"),
                                                   ConfigurationManager.AppSettings("ReportServerPassword").ToSecureString)
            wr.Timeout = System.Threading.Timeout.Infinite

            'Obtenemos el stream del reporte solicitado
            Dim wresp = wr.GetResponse

            'Retornamos el archivo al cliente que lo esta solicitando
            Return File(wresp.GetResponseStream, wresp.ContentType,
                        String.Format("Listado_Alumnos_Periodo_Recuperacion_{0}.{1}", Anio.EncodeHTML, If(formato.Equals("PDF"), "pdf", "xls")))
        End Function

        <HttpGet()> _
        <Authorize(Roles:="ERA")> _
        Function AlumnosPeriodoRecuperacionXtra(formato As String, Anio As String) As FileStreamResult
            Dim format = If(formato.Equals("PDF"), "pdf", "excel")
            Dim sURL = String.Format("{0}/Alumnos/Alumnos_Periodo_Recuperacion_Xtra&ANIO={2}&rs:Format={1}",
                                     ConfigurationManager.AppSettings("ReportServerURL"), format, Anio.EncodeHTML)

            'Creamos el WebRequest, para hacer la peticion y logearnos al servidor.
            Dim wr As HttpWebRequest = HttpWebRequest.Create(sURL)
            wr.Credentials = New NetworkCredential(ConfigurationManager.AppSettings("ReportServerUser"),
                                                   ConfigurationManager.AppSettings("ReportServerPassword").ToSecureString)
            wr.Timeout = System.Threading.Timeout.Infinite

            'Obtenemos el stream del reporte solicitado
            Dim wresp = wr.GetResponse

            'Retornamos el archivo al cliente que lo esta solicitando
            Return File(wresp.GetResponseStream, wresp.ContentType,
                        String.Format("Listado_Alumnos_Periodo_Recuperacion_Extraordinario_{0}.{1}", Anio.EncodeHTML, If(formato.Equals("PDF"), "pdf", "xls")))
        End Function

        <HttpGet()> _
        <Authorize(Roles:="ERA")> _
        Function NotasByPeriodo(formato As String, IDPeriodo As String) As FileStreamResult
            Dim format = If(formato.Equals("PDF"), "pdf", "excel")
            Dim sURL = String.Format("{0}/Alumnos/NotasPeriodo&PERIODO={2}&rs:Format={1}",
                                     ConfigurationManager.AppSettings("ReportServerURL"), format, IDPeriodo.EncodeHTML)

            'Creamos el WebRequest, para hacer la peticion y logearnos al servidor.
            Dim wr As HttpWebRequest = HttpWebRequest.Create(sURL)
            wr.Credentials = New NetworkCredential(ConfigurationManager.AppSettings("ReportServerUser"),
                                                   ConfigurationManager.AppSettings("ReportServerPassword").ToSecureString)
            wr.Timeout = System.Threading.Timeout.Infinite

            'Obtenemos el stream del reporte solicitado
            Dim wresp = wr.GetResponse

            'Retornamos el archivo al cliente que lo esta solicitando
            Return File(wresp.GetResponseStream, wresp.ContentType,
                        String.Format("Notas_Periodo_Evaluativo_{0}.{1}", IDPeriodo, If(formato.Equals("PDF"), "pdf", "xls")))
        End Function

        <HttpGet()> _
        <Authorize(Roles:="PRF")> _
        Function AlumnosImparteProfesor(Year As String, IDGrado As Integer) As FileStreamResult
            Dim sURL = String.Format("{0}/Alumnos/Listado_Alumnos_Seccion&YEAR={1}&IDGrado={2}&rs:Format=excel",
                                     ConfigurationManager.AppSettings("ReportServerURL"), Year.EncodeHTML, IDGrado)

            'Creamos el WebRequest, para hacer la peticion y logearnos al servidor.
            Dim wr As HttpWebRequest = HttpWebRequest.Create(sURL)
            wr.Credentials = New NetworkCredential(ConfigurationManager.AppSettings("ReportServerUser"),
                                                   ConfigurationManager.AppSettings("ReportServerPassword").ToSecureString)
            wr.Timeout = System.Threading.Timeout.Infinite

            'Obtenemos el stream del reporte solicitado
            Dim wresp = wr.GetResponse

            'Retornamos el archivo al cliente que lo esta solicitando
            Return File(wresp.GetResponseStream, wresp.ContentType,
                        String.Format("Alumnos_{0}_{1}.xls", IDGrado, Year.EncodeHTML))
        End Function

        <HttpGet()> _
        <Authorize(Roles:="PRF")> _
        Function CuadroResumenNotasProfesor(Grado As Integer, Materia As Integer, Periodo As String) As FileStreamResult
            Dim sURL = String.Format("{0}/Alumnos/NotasPeriodo_Profesor&GRADO={1}&MATERIA={2}&PROFESOR={3}&PERIODO={4}&rs:Format=excel",
                                     ConfigurationManager.AppSettings("ReportServerURL"), Grado, Materia, User.Identity.Name, Periodo)

            'Creamos el WebRequest, para hacer la peticion y logearnos al servidor.
            Dim wr As HttpWebRequest = HttpWebRequest.Create(sURL)
            wr.Credentials = New NetworkCredential(ConfigurationManager.AppSettings("ReportServerUser"),
                                                   ConfigurationManager.AppSettings("ReportServerPassword").ToSecureString)
            wr.Timeout = System.Threading.Timeout.Infinite

            'Obtenemos el stream del reporte solicitado
            Dim wresp = wr.GetResponse

            'Retornamos el archivo al cliente que lo esta solicitando
            Return File(wresp.GetResponseStream, wresp.ContentType,
                        String.Format("Cuadro_Resumen_Notas_{1}_{2}_{0}.xls", Periodo.Substring(0, 2), Grado, Materia))
        End Function
    End Class
End Namespace
